Aller au contenu principal

M'en fou pas lu

  • Tu clones ca
  • Tu suis les instructions d'installation
  • Tu profites

Pourquoi utiliser devenv

Devenv permet de faciliter la mise en place d'environnement de développement. Il utilise le package manager de nix pour faire en sorte que chaque environnement de développement soit isolé tout en restant performant car tout tourne sur la machine hôte.

Et pourquoi pas docker compose ?

  • Pas de possibilité de comprendre en un seul fichier toutes les dépendances de l'environnement de développement
  • Pas de possibilité de garder ses préférences de terminal (.bashrc), d'utiliser ses outils préférés en cli si besoin (vim, tmux, etc)
  • Il faut gérer les volumes pour savoir ce à quoi on veut avoir accés pendant le développement
  • Probléme de lenteur avec next.js
  • Probléme d'usage de RAM avec mac (Besoin d'une machne virtuelle faisant tourner des container)
  • Compliqué de faire tourner les linter dans les hook git étant donné que le runtime est dans le container alors que la commande git est lancée sur la machine hôte

Installation

Nix package manager​

La première chose à faire est d'installer le package manager nix. Le mieux est d'utiliser le determinate installer.

curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install

Il faut voir cet outil comme une sorte d'apt compatible avec tous les systèmes d'exploitation Linux et MacOS.

Installation de devenv​

nix profile install --accept-flake-config nixpkgs#devenv
remarque

le flag --accept-flake-config est lié au fait que la notion de flakes dans nix n'est pas encore considérée comme stable, même si la communauté nix l'utilise déjà en majorité.

Vérification de l'installation​

en lançant la commande suivante, vous devriez voir la version de devenv

devenv version

Configuration

Initialisation​

Si vous voulez juste un env de dev ITN "classique"​

https://github.com/ITNetworkParis/skeleton

Si vous souhaitez configurer un environnement de zero​

cd <votre-nouveau-super-projet>
devenv init

Fichiers de configuration​

Vous aves 4 fichiers de configuration créé

  • .envrc => fichier de configuration de direnv (j'en parle plus bas)
  • devenv.nix => c'est dans ce fichier que vous allez décrire votre environnement de développement
  • devenv.yaml => c'est les valeurs d'entrée de votre environnement de développement, normalement vous n'avez pas besoin de le modifier
  • devenv.lock => c'est le fichier qui s'assure sue tout le monde utilise la même version des dépendances (équivaut à un yarn.lock ou un composer.lock)

devenv.nix​

le guide décrit assez bien comment configurer les différents éléments. Concrétement vous allez avoir besoin de trois éléments principaux

Languages​

Ce sont les différents runtime à installer. Par exemple, si vous avez besoin de nodejs 20, vous allez devoir ajouter la ligne suivante dans votre devenv.nix

languages = {
javascript = {
enable = true;
package = pkgs.nodejs_20;
};
};

Services​

Ce sont les services que vous allez devoir lancer pour que votre environnement de développement fonctionne. Par exemple, si vous avez besoin de postgresql 16, vous allez devoir ajouter la ligne suivante dans votre devenv.nix

services = {
postgresql = {
enable = true;
package = pkgs.postgresql_16;
};
};

Processes​

Ce sont les processus que vous allez devoir lancer pour que votre environnement de développement fonctionne. Par exemple, si vous avez besoin de lancer votre démon next.js, vous allez devoir ajouter la ligne suivante dans votre devenv.nix

processes = {
nextjs.exec = "cd front && npm run dev";
};
info

Il est possible de définir des dépendances avec des services, par exemple si vous avez besoin de lancer un worker qui dépend de postgresql et rabbitmq, vous pouvez ajouter la ligne suivante dans votre devenv.nix

processes = {
my-worker = {
exec = "bin/console swarrot:consume:my-worker";
depends_on.rabbitmq.condition = "process_healthy";
depends_on.postgres.condition = "process_healthy";
};
};

Les autres config intéresantes mais moins importantes​

Hooks git​

scripts​

Utilisation

Activation de l'environnement de développement​

Normalement pas nécessaire si direnv est installé

devenv shell

Lancement des services et des processus (utilise compose)​

devenv up
info

petits tips intéressants sur process-compose

direnv (optionnel)​

Si vous voulez que votre environnement de développement soit activé automatiquement à chaque fois que vous entrez dans le dossier de votre projet, vous pouvez utiliser direnv.

nix profile install --accept-flake-config nixpkgs#direnv

ajouter à la fin de votre fichier .bashrc

eval "$(direnv hook bash)"
attention

il faudra penser à relancer votre terminal pour que les changements soient pris en compte

info

il faut utiliser la commande direnv allow pour autoriser l'exécution du fichier .envrc la première fois que vous entrez dans le dossier de votre projet (c'est une sécurité de direnv)

Astuces​

Surcharger le fichier de configuration​

Vous pouvez surcharger la configuration avec un fichier de configuration spécifique(sur le même principe que le docker-compose.override.yml de docker) en créant un fichier devenv.local.nix

Désactiver un service​

Par exemple pour les personnes souhaitant garder la base de donnée installée via APT

services.postgres.enable = lib.mkForce false;

Désactiver un processus​

Si on ne veut pas lancer certains worker rabbitmq

processes.mailer_processor.process-compose.disabled = true;

mailer_processor est le nom du process défini dans devenv.nix

Chercher un paquet​

Avec devenv​

La recherche devenv permet à la fois de chercher dans les options de devenv mais aussi dans les paquets nix disponibles

devenv search php

https://search.nixos.org/packages

Pour installer un paquet une fois que l'on connait son nom, se référer à la section suivante de la documentation

Installer un paquet a une version spécifique​

Nixhub est un moteur de recherche alternatif pour les paquets nix. Il a l'avantage de donner la possibilité de connaitre toutes les versions disponibles d'un paquet. C'est un outil fourni par jetify, créateur d'une alternative à devenv nommé devbox.

Par exemple si vous voulez installer bat (une alternative en rust à cat à la version 0.20), vous pouvez aller sur la page nixhub de bat pour voir toutes les versions disponibles. Pour installer la versions que l'on veut, il faut récupérer le hash du commit Nixpkgs (nixpkgs/4d38122a19cc3c415baf04b99906c8caa828a5fc dans notre cas) et ajouter la ligne suivante dans votre devenv.yaml

inputs:
# We want update on process-compose for new features (clean and mark logs)
nix-bat_0_22_0:
url: github:NixOS/nixpkgs?rev=4d38122a19cc3c415baf04b99906c8caa828a5fc

puis dans le fichier devenv.nix

{ pkgs, lib, config, inputs, ... }:

let
nix-bat_0_22_0 = import nix-bat_0_22_0 { inherit (pkgs) system; };
in
{


packages = [
nix-bat_0_22_0.bat
]

# ...

}

Voir les exemples de configuration​

Beaucoup d'exemples de configuration sont disponibles sur le github de devenv

Mettre à jour devenv​

nix profile upgrade --accept-flake-config devenv